import re
import threading

output_mod = True

no = 0


class Massage_deal:
    connect = None

    update_Thread = None
    update_switch = False

    mid = -1
    x = 0
    y = 0
    z = 0
    mpry = [0, 0, 0]
    pitch = 0
    roll = 0
    yaw = 0
    vgx = 0
    vgy = 0
    vgz = 0
    templ = 0
    temph = 0
    tof = 0
    h = 0
    bat = 0
    baro = 0.0
    time = 0
    agx = 0.0
    agy = 0.0
    agz = 0.0

    def __init__(self, connection=None):
        self.connect = connection

    def start_update(self):
        self.update_switch = True
        if self.update_Thread is None:
            self.update_Thread = threading.Thread(target=self.update_message)
        self.update_Thread.start()

    def end_update(self):
        self.update_switch = False

    def update_message(self):
        while self.update_switch:
            self.set_massage()

    def set_massage(self):
        # 获取原数据
        info = self.connect.rec_msg(no=0)[0].decode('utf-8')
        # 提取无人机基本状态,分离数据
        data = [float(data) for data in re.findall(r'-?\d+\.?\d*', info)]
        if output_mod:
            print(info)
        """设置无人机基本参数
        mid: 检测到的挑战卡ID,未打开挑战卡探测功能返回 - 2,打开探测功能但未检测到挑战卡返回 - 1
        x: 飞行器相对于检测到的挑战卡的轴坐标，厘米未打开挑战卡探测功能返回 - 200,打开探测功能但未检测到挑战卡返回 - 100
        y: 飞行器相对于检测到的挑战卡的Y轴坐标，厘米未打开挑战卡探测功能返回 - 200,打开探测功能但未检测到挑战卡返回 - 100
        z: 飞行器相对于检测到的挑战卡的Z轴坐标，厘米未打开挑战卡探测功能返回 - 200,打开探测功能但未检测到挑战卡返回 - 100
        mpry: 飞行器在挑战卡中的俯仰、偏航及横滚角度，度数，若未检测到挑战卡，返回0
        pitch: 俯仰角度，度数 roll: 横滚角度，度数 yaw: 偏航，度数
        vgx: x轴速度，分米每秒
        vgy: y轴速度，分米每秒
        vgz: z轴速度，分米每秒
        templ: 主板最低温度，摄氏度
        temph: 主板最高温度，摄氏度
        tof: ToF距离，厘米
        h: 相对起飞点高度，厘米
        bat: 当前电量百分比，％
        baro: 气压计测量高度，米
        time: 电机运转时间，秒
        agx: x轴加速度，厘米每二次方秒
        agy: y轴加速度，厘米每二次方秒
        agz: z轴加速度，厘米每二次方秒
        """

        self.mid = int(data[0])
        self.x = int(data[1])
        self.y = int(data[2])
        self.z = int(data[3])
        self.mpry = [int(data[4]), int(data[5]), int(data[6])]
        self.pitch = int(data[7])
        self.roll = int(data[8])
        self.yaw = int(data[9])
        self.vgx = int(data[10])
        self.vgy = int(data[11])
        self.vgz = int(data[12])
        self.templ = int(data[13])
        self.temph = int(data[14])
        self.tof = int(data[15])
        self.h = int(data[16])
        self.bat = int(data[17])
        self.baro = data[18]
        self.time = int(data[19])
        self.agx = data[20]
        self.agy = data[21]
        self.agz = data[22]
